package prh25.biblioteca.service;

import java.util.List;

import prh25.biblioteca.entity.Documento;


public interface DocumentoService {
	
	/**
	 * Salva um arquivo no banco de dados.
	 * @param documento - Documento a ser salvo no banco de dados.
	 * @param diretorioAplicacao - diretorio onde se encontra o arquivo.
	 * @return True se o arquivo foi salvo com sucesso, false caso contrario.
	 */
	public boolean finalizarEnvioArquivo(Documento documento, String diretorioAplicacao);
	
	/**
	 * Busca todos os documentos no banco de dados que obedecam ao criterio
	 * de pesquisa passado pelo usuario.
	 * @param pesquisa - Criterio de pesquisa.
	 */
	public List<Documento> listarDocumentos(String pesquisa);
	
	/**
	 * Busca no banco de dados todos os arquivos ativos, consultados pela palavra chave
	 * e que obedecam a uma restricao.
	 * @param palavraChave - A palavra chave da pesquisa.
	 * @param restricao - A restricao que os documentos devem obedecer.
	 * @return Todos os documentos encontrados que contenham a palavra chave 
	 * no titulo, na descricao ou no autor.
	 */
	public List<Documento> listarDocumentosAtivos(String palavraChave, String restricao);
	
	/**
	 * Deleta um arquivo do banco de dados.
	 * @param uid - O identificador unico do arquivo.
	 */
	public boolean excluirDocumento(String uid);
	
	/**
	 * Altera o status de um documento, ou seja, se o documento foi ou nao aceito
	 * @param uid - O identificador unico do documento.
	 * @param situacao - O status atual que o documento se encontra no sistema.
	 * @return O documento que tera o seu status alterado. 
	 */
	public Documento setSituacaoDocumento(String uid, boolean situacao);

	/**
	 * Busca o arquivo no banco de dados para o usuario realizar download.
	 * @param uid - O identificador do documento.
	 * @param diretorioAplicacao - O caminho de onde se encontra o arquivo.
	 * @return O nome do arquivo que sera feito download.
	 */
	public String requisitarArquivoParaDownload(String uid, String diretorioAplicacao);
	
	/**
	 * Apaga o arquivo da pasta temporaria de download que havia sido copiado.
	 * @param uid - Identificador do arquivo.
	 * @param diretorioAplicacao - Caminho da pasta temporaria.
	 * @return True se operacao foi realizada com sucesso, false caso contrario.
	 */
	public boolean limparArquivoRequisitado(String uid,  String diretorioAplicacao );
	
}
